package org.aspectsense.middleware.annotations;

	import java.lang.annotation.Retention;
	import java.lang.annotation.RetentionPolicy;
	import java.lang.annotation.Target;
import java.lang.annotation.ElementType;

	/**
	 * Java annotation class for describing <code>AspectSence</code> Services.
	 * @author Nearchos Paspallis
	 * @author Costas Kakousis
	 *
	 */
	@Retention(RetentionPolicy.RUNTIME)
	@Target(ElementType.TYPE)
	public @interface Service
	{
	    /**
	     * The ID to be used when displaying the service.
	     *
	     * @return a String identifying this service when displayed (e.g., in
	     * GUIs)
	     */
	    String displayID();

	    /**
	     * Some text describing the specific service type; not required.
	     *
	     * @return a String describing this component
	     */
	    String description() default "Undescribed service type";
	    
	    /**
	     * Points to an interface type of class that encapsulates the type of
	     * functionality offered by this service.
	     *
	     * @return an instance of class describing the type of the provided service
	     */
	    Class<?> serviceType();
	    
	    /**
	     * Returns a string to be used for the formation of the utility function.
	     *
	     * @return a string expression of the utility function
	     */
	    String utilityFunction();
	    
	    /**
	     * Specify if it is used as an end-user service
	     */
	    boolean isEndUserService ();
	}

